﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;

namespace FONCREAGROINTEGRAL.Controllers
{
    public class adendaController : Controller
    {
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();
        //
        // GET: /adenda/

        public ActionResult Index()
        {
            return View();
        }

        //
        // GET: /adenda/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /adenda/Create

        //public ActionResult Create(int id)
        //{
        //    var econtrato = entidades.CONTRATOADENDAPERSONALs.Single(c => c.idcontratoadendapersonal == id);

        //    List<SelectListItem> siono = new List<SelectListItem>();
        //    siono.Add(new SelectListItem { Text = "NO", Value = "false" });
        //    siono.Add(new SelectListItem { Text = "SI", Value = "true" });

        //    ViewData["discapacidad"] = new SelectList(siono.AsEnumerable(), "value", "text", econtrato.discapacidad);
        //    ViewData["otroquinta"] = new SelectList(siono.AsEnumerable(), "value", "text", econtrato.otroquinta);
        //    ViewData["rentaexonerada19"] = new SelectList(siono.AsEnumerable(), "value", "text", econtrato.rentaexonerada19);
        //    ViewData["sindicalizado"] = new SelectList(siono.AsEnumerable(), "value", "text", econtrato.sindicalizado);

        //    List<SelectListItem> tipopago = new List<SelectListItem>();
        //    tipopago.Add(new SelectListItem { Text = "EFECTIVO", Value = "1" });
        //    tipopago.Add(new SelectListItem { Text = "DEPOSITO EN CUENTA", Value = "2" });
        //    tipopago.Add(new SelectListItem { Text = "OTROS", Value = "3" });
        //    ViewData["tipopago"] = new SelectList(tipopago.AsEnumerable(), "value", "text", econtrato.tipopago);

        //    List<SelectListItem> situacion = new List<SelectListItem>();
        //    situacion.Add(new SelectListItem { Text = "ACTIVO O SUBSIDIADO", Value = "10" });
        //    situacion.Add(new SelectListItem { Text = "BAJA", Value = "12" });
        //    situacion.Add(new SelectListItem { Text = "SIN VINCULO LABORAL POR LIQUIDAR", Value = "18" });
        //    situacion.Add(new SelectListItem { Text = "SUSPENCION PERFECTA", Value = "14" });
        //    ViewData["situacion"] = new SelectList(situacion.AsEnumerable(), "value", "text", econtrato.situacion);

        //    List<SelectListItem> periodicidadingreso = new List<SelectListItem>();
        //    periodicidadingreso.Add(new SelectListItem { Text = "MENSUAL", Value = "1" });
        //    periodicidadingreso.Add(new SelectListItem { Text = "QUINCENAL", Value = "2" });
        //    periodicidadingreso.Add(new SelectListItem { Text = "SEMANAL", Value = "3" });
        //    periodicidadingreso.Add(new SelectListItem { Text = "DIARIA", Value = "4" });
        //    periodicidadingreso.Add(new SelectListItem { Text = "OTROS", Value = "5" });
        //    ViewData["periodicidadingreso"] = new SelectList(periodicidadingreso.AsEnumerable(), "value", "text", econtrato.periodicidadingreso);

        //    List<SelectListItem> situacionespecial = new List<SelectListItem>();
        //    situacionespecial.Add(new SelectListItem { Text = "TRABAJADOR DE DIRECCION", Value = "1" });
        //    situacionespecial.Add(new SelectListItem { Text = "TRABAJADOR DE CONFIANZA", Value = "2" });
        //    situacionespecial.Add(new SelectListItem { Text = "NINGUNA", Value = "3" });
        //    ViewData["situacionespecial"] = new SelectList(situacionespecial.AsEnumerable(), "value", "text", econtrato.situacionespecial);
        //    econtrato.nro = "";
        //    //econtrato.idcontratoadendapersonal = 0;
        //    return View(econtrato);
        //} 

        //
        // POST: /adenda/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection, CONTRATOADENDAPERSONAL CONTRATOADENDAPERSONAL, HttpPostedFileBase adjunto)
        {
            string strResponse = String.Empty;
            try
            {
                // TODO: Add insert logic here
                string posicion = Convert.ToString(Request.Params["IdPosicion"]);
                int IdPersonal = Convert.ToInt32(Request.Params["IdPersonal"]);

                if (String.IsNullOrEmpty(posicion))
                {
                    ViewData["posicion"] = "* Seleccione Cargo";
                    return View();
                }

                var PeriodoLaboral = new periodolaboralController();
                int IdPeriodoLaboral = PeriodoLaboral.ConprobarPeriodoLaboral(IdPersonal);

                if (IdPeriodoLaboral <= 0)
                {
                    strResponse = "{success: false,msg:'La Persona no tiene Periodo Laboral'}";
                    return Content(strResponse);
                }

                //para validar que la fechas ingresada no se superpongan a fechas de adendas existentes
                ////////////////////////////////////////////////////////////////////////////////////////
                var context = new SistIntFoncreagroEntities();
                decimal? validacion = context.ValidarCONTRATOADENDAPERSONAL(CONTRATOADENDAPERSONAL.fechainicio, CONTRATOADENDAPERSONAL.fechafin, CONTRATOADENDAPERSONAL.IdPersonal).FirstOrDefault();

                if (validacion > 0)
                {
                    strResponse = "{success: false,msg:'Las fechas son incorrectas'}";
                    return Content(strResponse);
                }
                if (ModelState.IsValid)
                {

                    var anio = entidades.EJERCICIOs.Single(ej => ej.EstadoP == true);
                    var ccontrato = new CONTRATOADENDAPERSONAL();
                    ccontrato.fechafinreal = Convert.ToDateTime("31/12/" + Convert.ToString(anio.Anio));
                    ccontrato.tipo = 2;
                    //ccontrato.idcontrato = id;
                    TryUpdateModel(ccontrato, collection.ToValueProvider());
                    ccontrato.IdPeriodoLaboral = IdPeriodoLaboral;
                    ccontrato.estado = true;
                    entidades.AddToCONTRATOADENDAPERSONALs(ccontrato);

                    entidades.SaveChanges();

                    string grupos = "";
                    if (adjunto != null)
                    {
                        grupos = adjunto.FileName.ToString();
                        if (grupos.EndsWith(".pdf") || grupos.EndsWith(".PDF"))
                        {
                            adjunto.SaveAs(Server.MapPath("~/Content/RRHH/Contratos/") + Convert.ToString(ccontrato.idcontratoadendapersonal) + ".pdf");
                        }
                    }

                    int IdPosicion = Convert.ToInt32(posicion);

                    var cposicion = new POSICIONPERSONA();
                    cposicion.estado = true;
                    cposicion.idcontratoadendapersonal = ccontrato.idcontratoadendapersonal;
                    cposicion.FechaInicio = ccontrato.fechainicio;
                    cposicion.FechaFin = ccontrato.fechafin;
                    cposicion.IdPosicion = IdPosicion;
                    cposicion.IdPersonal = ccontrato.IdPersonal;
                    //TryUpdateModel(ccontrato, collection.ToValueProvider());
                    entidades.AddToPOSICIONPERSONAs(cposicion);
                    entidades.SaveChanges();

                    DateTime mesinicio = new DateTime();
                    mesinicio = DateTime.Parse(ccontrato.fechainicio.ToString());

                    DateTime diainicio = new DateTime();
                    diainicio = DateTime.Parse(ccontrato.fechainicio.ToString());

                    entidades.RLLENAREJERCICIOMESPERSONA(Convert.ToInt32(ccontrato.IdPersonal), Convert.ToInt32(mesinicio.Month));
                    entidades.RCALCULORETENCION(Convert.ToInt32(ccontrato.IdPersonal));

                    try
                    {
                        var eposicion = entidades.POSICIONPERSONAs.Single(posp => posp.IdPersonal == cposicion.IdPersonal &&
                            posp.estado == true && posp.IdPosicionPersona != cposicion.IdPosicionPersona);
                        eposicion.estado = false;
                        TryUpdateModel(eposicion);
                        entidades.SaveChanges();
                    }
                    catch
                    {
                        strResponse = "{success: true,msg:'Registro Creado Correctamente'}";
                        return Content(strResponse);
                    }

                    strResponse = "{success: true,msg:'Registro Creado Correctamente'}";
                    return Content(strResponse);
                }
                else
                {
                    strResponse = "{success: false,msg:'Fallo en la Creación'}";
                    return Content(strResponse);
                }
            }
            catch
            {
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
        }
        
        //
        // GET: /adenda/Edit/5
 
        //public ActionResult Edit(int id)
        //{
        //    var econtrato = entidades.CONTRATOADENDAPERSONALs.Single(c => c.idcontratoadendapersonal == id);

        //    List<SelectListItem> siono = new List<SelectListItem>();
        //    siono.Add(new SelectListItem { Text = "NO", Value = "false" });
        //    siono.Add(new SelectListItem { Text = "SI", Value = "true" });

        //    ViewData["discapacidad"] = new SelectList(siono.AsEnumerable(), "value", "text", econtrato.discapacidad);
        //    ViewData["otroquinta"] = new SelectList(siono.AsEnumerable(), "value", "text", econtrato.otroquinta);
        //    ViewData["rentaexonerada19"] = new SelectList(siono.AsEnumerable(), "value", "text", econtrato.rentaexonerada19);
        //    ViewData["sindicalizado"] = new SelectList(siono.AsEnumerable(), "value", "text", econtrato.sindicalizado);

        //    List<SelectListItem> tipopago = new List<SelectListItem>();
        //    tipopago.Add(new SelectListItem { Text = "EFECTIVO", Value = "1" });
        //    tipopago.Add(new SelectListItem { Text = "DEPOSITO EN CUENTA", Value = "2" });
        //    tipopago.Add(new SelectListItem { Text = "OTROS", Value = "3" });
        //    ViewData["tipopago"] = new SelectList(tipopago.AsEnumerable(), "value", "text", econtrato.tipopago);

        //    List<SelectListItem> situacion = new List<SelectListItem>();
        //    situacion.Add(new SelectListItem { Text = "ACTIVO O SUBSIDIADO", Value = "10" });
        //    situacion.Add(new SelectListItem { Text = "BAJA", Value = "12" });
        //    situacion.Add(new SelectListItem { Text = "SIN VINCULO LABORAL POR LIQUIDAR", Value = "18" });
        //    situacion.Add(new SelectListItem { Text = "SUSPENCION PERFECTA", Value = "14" });
        //    ViewData["situacion"] = new SelectList(situacion.AsEnumerable(), "value", "text", econtrato.situacion);

        //    List<SelectListItem> periodicidadingreso = new List<SelectListItem>();
        //    periodicidadingreso.Add(new SelectListItem { Text = "MENSUAL", Value = "1" });
        //    periodicidadingreso.Add(new SelectListItem { Text = "QUINCENAL", Value = "2" });
        //    periodicidadingreso.Add(new SelectListItem { Text = "SEMANAL", Value = "3" });
        //    periodicidadingreso.Add(new SelectListItem { Text = "DIARIA", Value = "4" });
        //    periodicidadingreso.Add(new SelectListItem { Text = "OTROS", Value = "5" });
        //    ViewData["periodicidadingreso"] = new SelectList(periodicidadingreso.AsEnumerable(), "value", "text", econtrato.periodicidadingreso);

        //    List<SelectListItem> situacionespecial = new List<SelectListItem>();
        //    situacionespecial.Add(new SelectListItem { Text = "TRABAJADOR DE DIRECCION", Value = "1" });
        //    situacionespecial.Add(new SelectListItem { Text = "TRABAJADOR DE CONFIANZA", Value = "2" });
        //    situacionespecial.Add(new SelectListItem { Text = "NINGUNA", Value = "3" });
        //    ViewData["situacionespecial"] = new SelectList(situacionespecial.AsEnumerable(), "value", "text", econtrato.situacionespecial);

        //    return View(econtrato);
        //}

        //
        // POST: /adenda/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection, CONTRATOADENDAPERSONAL CONTRATOADENDAPERSONAL, HttpPostedFileBase adjunto)
        {
            string strResponse = String.Empty;
            var econtrato = entidades.CONTRATOADENDAPERSONALs.Single(c => c.idcontratoadendapersonal == id);

            //List<SelectListItem> siono = new List<SelectListItem>();
            //siono.Add(new SelectListItem { Text = "NO", Value = "false" });
            //siono.Add(new SelectListItem { Text = "SI", Value = "true" });

            //ViewData["discapacidad"] = new SelectList(siono.AsEnumerable(), "value", "text");
            //ViewData["otroquinta"] = new SelectList(siono.AsEnumerable(), "value", "text");
            //ViewData["rentaexonerada19"] = new SelectList(siono.AsEnumerable(), "value", "text");
            //ViewData["sindicalizado"] = new SelectList(siono.AsEnumerable(), "value", "text");

            //List<SelectListItem> tipopago = new List<SelectListItem>();
            //tipopago.Add(new SelectListItem { Text = "EFECTIVO", Value = "1" });
            //tipopago.Add(new SelectListItem { Text = "DEPOSITO EN CUENTA", Value = "2" });
            //tipopago.Add(new SelectListItem { Text = "OTROS", Value = "3" });
            //ViewData["tipopago"] = new SelectList(tipopago.AsEnumerable(), "value", "text");

            //List<SelectListItem> situacion = new List<SelectListItem>();
            //situacion.Add(new SelectListItem { Text = "ACTIVO O SUBSIDIADO", Value = "10" });
            //situacion.Add(new SelectListItem { Text = "BAJA", Value = "12" });
            //situacion.Add(new SelectListItem { Text = "SIN VINCULO LABORAL POR LIQUIDAR", Value = "18" });
            //situacion.Add(new SelectListItem { Text = "SUSPENCION PERFECTA", Value = "14" });
            //ViewData["situacion"] = new SelectList(situacion.AsEnumerable(), "value", "text");

            //List<SelectListItem> periodicidadingreso = new List<SelectListItem>();
            //periodicidadingreso.Add(new SelectListItem { Text = "MENSUAL", Value = "1" });
            //periodicidadingreso.Add(new SelectListItem { Text = "QUINCENAL", Value = "2" });
            //periodicidadingreso.Add(new SelectListItem { Text = "SEMANAL", Value = "3" });
            //periodicidadingreso.Add(new SelectListItem { Text = "DIARIA", Value = "4" });
            //periodicidadingreso.Add(new SelectListItem { Text = "OTROS", Value = "5" });
            //ViewData["periodicidadingreso"] = new SelectList(periodicidadingreso.AsEnumerable(), "value", "text");

            //List<SelectListItem> situacionespecial = new List<SelectListItem>();
            //situacionespecial.Add(new SelectListItem { Text = "TRABAJADOR DE DIRECCION", Value = "1" });
            //situacionespecial.Add(new SelectListItem { Text = "TRABAJADOR DE CONFIANZA", Value = "2" });
            //situacionespecial.Add(new SelectListItem { Text = "NINGUNA", Value = "3" });
            //ViewData["situacionespecial"] = new SelectList(situacionespecial.AsEnumerable(), "value", "text");

            try
            {
                // TODO: Add update logic here
                string posicion = Convert.ToString(Request.Params["IdPosicion"]);

                if (String.IsNullOrEmpty(posicion))
                {
                    ViewData["posicion"] = "* Seleccione Cargo";
                    return View();
                }

                if (ModelState.IsValid)
                {

                    //var ccontrato = new CONTRATOADENDAPERSONAL();
                    TryUpdateModel(econtrato);
                    entidades.SaveChanges();

                    string grupos = "";
                    if (adjunto != null)
                    {
                        grupos = adjunto.FileName.ToString();
                        if (grupos.EndsWith(".pdf") || grupos.EndsWith(".PDF"))
                        {
                            adjunto.SaveAs(Server.MapPath("~/Content/RRHH/Contratos/") + Convert.ToString(econtrato.idcontratoadendapersonal) + ".pdf");
                        }
                    }
                    int IdPosicion = Convert.ToInt32(posicion);
                    int idcontratoadendapersonal = Convert.ToInt32(econtrato.idcontratoadendapersonal);

                    var eposicion = entidades.POSICIONPERSONAs.Single(pp => /*pp.IdPosicion == IdPosicion &&*/
                        pp.idcontratoadendapersonal == idcontratoadendapersonal);
                    eposicion.IdPosicion = IdPosicion;
                    TryUpdateModel(eposicion);
                    entidades.SaveChanges();

                    //var fecha = DateTime
                    DateTime mesinicio = new DateTime();
                    mesinicio = DateTime.Parse(econtrato.fechainicio.ToString());

                    DateTime diainicio = new DateTime();
                    diainicio = DateTime.Parse(econtrato.fechainicio.ToString());

                    entidades.RLLENAREJERCICIOMESPERSONA(Convert.ToInt32(econtrato.IdPersonal),Convert.ToInt32(mesinicio.Month));
                    entidades.RCALCULORETENCION(Convert.ToInt32(econtrato.IdPersonal));

                    /*try
                    {
                        var eposicionx = entidades.POSICIONPERSONAs.Single(posp => posp.IdPersonal == cposicion.IdPersonal &&
                            posp.estado == true && posp.IdPosicionPersona != cposicion.IdPosicionPersona);
                        eposicion.estado = false;
                        TryUpdateModel(eposicionx);
                        entidades.SaveChanges();
                    }
                    catch
                    {
                        return Content("OK");
                    }*/

                    strResponse = "{success: true,msg:'Registro Creado Correctamente'}";
                    return Content(strResponse);

                    //
                }
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
            catch
            {
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
        }

        //
        // GET: /adenda/Delete/5
 
        public ActionResult Delete(int id)
        {
            return View();
        }

        //
        // POST: /adenda/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
